Skip to main content

tcpdump & wireshark

Tcpdump 常用示例及相关参数

# 抓取指定协议和网络接口的数据包,
# -nn表示不解析主机名称,
# -c表示抓取的数据包个数
# -w表示将内容持久化到文件当中去,一般以`.pcap`后缀结尾
tcpdump -i eth0 -c 5 icmp and host 192.168.1.1 -nn

# 简单tcp数据包,保存的文件可以使用wireshark工具进行分析处理
tcpdump -i any tcp and host 192.168.2.100 and port 80 -w http.pcap

tcpdump 常用过滤表达式类

Wireshark 过滤器

过滤符号及组合

示例

  • ip相关

    ip.addr != 192.168.43.37        # 过滤非 192.168.43.37 主机的数据包, 官方不推荐使用该格式, 可能会出现漏包的现象.
    !(ip,addr == 192.168.43.37)
    # 或者使用
    not ip.addr == 192.168.43.37

    (ip.addr == 172.16.7.42 and dns) or (172.16.7.7 and icmp)
  • 针对协议的过滤

  • 获某种协议的数据包,表达式很简单仅仅需要把协议的名字输入即可

    http

    注意:是否区分大小写?答:区分,只能为小写

  • 捕获多种协议的数据包

    http or telnet
  • 排除某种协议的数据包

    not arp   或者   !tcp
  • 针对端口的过滤(视传输协议而定)

    • 捕获某一端口的数据包(以tcp协议为例)
    tcp.port == 80
    • 捕获多端口的数据包,可以使用and来连接,下面是捕获高于某端口的表达式(以udp协议为例)
    udp.port >= 2048
  • 针对长度和内容的过滤

    • 针对长度的过虑(这里的长度指定的是数据段的长度)
    udp.length < 20   
    http.content_length <=30
    • 针对uri 内容的过滤
    http.request.uri matches "user" (请求的uri中包含“user”关键字的)

    注意:matches 后的关键字是不区分大小写的!

    http.request.uri contains "User" (请求的uri中包含“user”关键字的)

    注意:contains 后的关键字是区分大小写的!

  • 针对http请求的一些过滤实例。

    • 过滤出请求地址中包含“user”的请求,不包括域名;
    http.request.uri contains "User"
    • 精确过滤域名
    http.host==baidu.com
    • 模糊过滤域名
    http.host contains "baidu"
    • 过滤请求的content_type类型
    http.content_type =="text/html"
    • 过滤http请求方法
    http.request.method=="POST"
    • 过滤tcp端口
    tcp.port==80
    http && tcp.port==80 or tcp.port==5566
    • 过滤http响应状态码
    http.response.code==302
    • 过滤含有指定cookie的http数据包
    http.cookie contains "userid"

参考链接